package com.dp.client.views.conexiones;

import java.util.Date;

import com.dp.client.dto.ConexionDTO;
import com.dp.client.servicios.conexion.IServiciosConexion;
import com.dp.client.servicios.conexion.IServiciosConexionAsync;
import com.dp.client.util.Alerts;
import com.gargoylesoftware.htmlunit.javascript.host.Popup;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.IntegerBox;

public class VuelosDialog extends PopupPanel {
	private FlexTable flexTable;
	private IServiciosConexionAsync servicios = GWT.create( IServiciosConexion.class );
	private Label lblAdministrarConexion;
	private Label lblUltimoVueloGenerado;
	private Label lblFechaultivuelo;
	private Button btnNewButton;
	private IntegerBox integerBoxDias;
	private Label lblDiasAGenerar;
	private Button btnCerrar;
	private ConexionDTO referencia;
	@SuppressWarnings("deprecation")
	public VuelosDialog( final ConexionDTO conexion ) {
		referencia = conexion;
		flexTable = new FlexTable();
		setWidget(flexTable);
		flexTable.setSize("345px", "139px");
		
		lblAdministrarConexion = new Label("Administrar Conexion");
		flexTable.setWidget(0, 0, lblAdministrarConexion);
		
		lblUltimoVueloGenerado = new Label("Ultimo vuelo generado : ");
		flexTable.setWidget(1, 0, lblUltimoVueloGenerado);
		
		lblFechaultivuelo = new Label("");
		flexTable.setWidget(1, 1, lblFechaultivuelo);
		Date hora = conexion.ultimaCreacionVuelos;
		if( hora == null ){
			lblFechaultivuelo.setText("No se tienen vuelos registrados");
		} else {
			lblFechaultivuelo.setText( DateTimeFormat.getShortDateFormat().format( hora ) );
		}
		
		lblDiasAGenerar = new Label("Dias a generar :");
		flexTable.setWidget(2, 0, lblDiasAGenerar);
		
		integerBoxDias = new IntegerBox();
		flexTable.setWidget(2, 1, integerBoxDias);
		
		btnNewButton = new Button("New button");
		btnNewButton.setText("Generar Nuevos Vuelos");
		flexTable.setWidget(3, 0, btnNewButton);
		btnNewButton.setWidth("166px");
		
		btnCerrar = new Button("Cerrar");
		flexTable.setWidget(3, 1, btnCerrar);
		btnCerrar.addClickHandler( new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				cerrar();
			}
		});
		
		btnNewButton.addClickHandler( new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				if( integerBoxDias.getValue() == null ) {
					Alerts.dialogErrorDecimal( "dias a generar" );
					return;
				}
				if( Alerts.confirmacionGenerica( "Desea generar los nuevos vuelos? ") ){
					generarNuevosVuelos();
				}
			}
		});
	}
	public void generarNuevosVuelos(){
		servicios.generarVuelosConexion(referencia, integerBoxDias.getValue() , new AsyncCallback<Boolean>() {
			@Override
			public void onFailure(Throwable caught) {
				Alerts.dialogErrorConexion();
			}
			@Override
			public void onSuccess(Boolean result) {
				cerrar();
				Alerts.dialogExitoCreacionDeObjeto("vuelos");
			}
		});
	}
	public void cerrar() { this.hide(); } 
}
